package apps

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
	"log"
	"main/src/configs"
	"time"
)

var DB = Init()

func Init() *gorm.DB {
	configs.InitConfig()
	db, err := gorm.Open(mysql.Open(configs.Config.MysqlDSN), &gorm.Config{
		// gorm日志模式：silent
		Logger: logger.Default.LogMode(logger.Silent),
		// 外键约束
		DisableForeignKeyConstraintWhenMigrating: true,
		// 禁用默认事务（提高运行速度）
		SkipDefaultTransaction: true,
		NamingStrategy: schema.NamingStrategy{
			// 使用单数表名，启用该选项，此时，`User` 的表名应该是 `user`
			SingularTable: true,
		},
	})
	if err != nil {
		panic(err)
	}

	sqlDB, _ := db.DB()
	// SetMaxIdleCons 设置连接池中的最大闲置连接数。
	sqlDB.SetMaxIdleConns(10)
	// SetMaxOpenCons 设置数据库的最大连接数量。
	sqlDB.SetMaxOpenConns(100)
	// SetConnMaxLifetime 设置连接的最大可复用时间。
	sqlDB.SetConnMaxLifetime(10 * time.Second)

	return db
}

func Migrate(model interface{ TableName() string }) {
	log.Println("<" + model.TableName() + "> Migrate")
	//迁移数据库
	err := DB.AutoMigrate(
		model,
	)
	if err != nil {
		log.Println("<"+model.TableName()+"> gorm Migrate Error : ", err)
	}
}
